const fs = require('fs')


function getFileByPath(fpath) {
	return new Promise(function(resolve, reject) {
		fs.readFile(fpath, 'utf-8', (err, dataStr) => {

			if (err) return reject(err)
			resolve(dataStr)
		})
	})
}

//注意：通过.then指定 回调函数的时候，成功的回调函数，必须传，但是，失败的回调，可以省略不传
//这是个错误示范，不建议使用
/* getFileByPath('./files/1.txt')
	.then(function(dataStr) {
		console.log(dataStr + '-------')
		
		getFileByPath('./files/2.txt')
		.then(function(dataStr){
			console.log(dataStr + '-------')
			
			getFileByPath('./files/3.txt')
			.then(function(dataStr){
				console.log(dataStr + '-------')
			})
		})
	}, function(err) {
		console.log(err.message)
	}) */
	
// 再上一个 .then中 返回一个新的 promise 实例，可以继续用下一个 .then 来处理
//如果，前面的Promise执行失败，不想让后续的操作终止
/* getFileByPath('./files/11.txt')
	.then(function(dataStr){
		console.log(dataStr)
		//读取文件2
	},function(err){
		console.log('失败：'+err.message)
		
		return getFileByPath('./files/2.txt')
	})
	.then(function(dataStr){
		console.log(dataStr)

		return getFileByPath('./files/3.txt')
	})
	.then(function(dataStr){
		console.log(dataStr)
		
	})


console.log('okokokok') */


//当我们有这样的需求:哪怕前面的Promise 执行失败了，但是,不要影响后续promise 的正常执行，此时，我们可以单独为每个promise，通过. then指定下失败的回调;
//有时候,我们有这样的需求,个上面的需求刚好相反:如果后续的promise 执行,依赖于前面Promise执行的结果，如果前面的失败了，则后面的就没有继续执行下去的意义了,此时，我们想要实现，-旦有报错，则立即终止所有Promise的执行 ;


getFileByPath('./files/1.txt')
	.then(function(dataStr){
		console.log(dataStr)
		//读取文件2
		return getFileByPath('./files/2.txt')
	})
	.then(function(dataStr){
		console.log(dataStr)

		return getFileByPath('./files/33.txt')
	})
	.then(function(dataStr){
		console.log(dataStr)
		
	})
	.catch(function(err){ //cach的作用：如果前面有任何的Promise执行失败，则立即终止所有的promise的执行，并 马上进入catch去处理Promise中 抛出的异常
		console.log('失败：'+err.message)
	})